/**
 *14. 最长公共前缀
 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀，返回空字符串 ""。
 示例 1:
 输入: ["flower","flow","flight"]
 输出: "fl"
 示例 2:
 输入: ["dog","racecar","car"]
 输出: ""
 解释: 输入不存在公共前缀。
 说明:
 所有输入只包含小写字母 a-z 。
 */
public class A616 {
    public static void main(String[] args) {
        String[] str = new String[]{"abcd","bbcd","cbcd"};

        Solution616 solution616 = new Solution616();
        solution616.longestCommonPrefix(str);

    }
}

class Solution616 {
    public String longestCommonPrefix(String[] strs) {

        String strResult = "";
        int minLength = 0;

        /**
         * 数组都为空串直接返回空串，且避免了下文的数组字符串元素长度角标越界
         */
        if(strs.length == 0){
            System.out.println("没有公共前缀");
            return strResult;
        }else{
            /**
             * 求取字符串数组中长度最小的字符串长度
             */
            minLength = strs[0].length();
            for (int i = 1; i < strs.length; i++) {
                if(minLength > strs[i].length()){
                    minLength = strs[i].length();
                }
            }
            System.out.println(minLength);

            /**
             * 求取公共的前缀字符串
             */

            int index = 0;
            for (int i = 0; i < minLength; i++) {
                char ch = strs[0].charAt(i);
                int count = 0;
                for (int j = 0; j < strs.length; j++) {
                    if(ch == strs[j].charAt(i)){
                        count ++;
                    }
                    //每个元素索引为i的字符都相同，计数器加一，当计数器等于数组长度，表明他们都公共索引字符
                    if(count == strs.length){

                        index ++;
                    }


                    //存在公共索引的话索引计数器加一，当第一个索引处字符为公共前缀继续向下执行
                    if(index == (i+1)){
                        strResult += ("" + ch);
                    }
                }

            }

            if(strResult.length() == 0){
                System.out.println("没有公共前缀");
                return strResult;
            }else {
                System.out.println(strResult);
                return strResult;
            }

        }



        /*String strResult = "";
        int countSame = 0;

        //求取字符串数组中长度最小的字符串长度
        int strLength = strs[0].length();
        for (int i = 1; i < strs.length; i++) {
            if(strLength > strs[i].length() ){
                strLength = strs[i].length();
            }
        }

        //求取公共字符串
        //怎样判断每个字符串的第一个字符都是相同的？？？？
        for (int i = 0; i < strLength; i++) {
            countSame = 0;
            for (int i1 = 0; i1 < strs.length; i1++) {
                char ch = strs[0].charAt(i);
                if(strs[i1].charAt(i) == ch ){
                    countSame++;
                }
                if(countSame == strs.length){
                    strResult += ch;
                }
            }
        }




//        loop:for (int i = 0; i < strs.length-1; i++) {
//            for (int j = 0; j < strLength; j++) {
//                if(strs[i].charAt(j)  == strs[i + 1].charAt(j)){
//                    strResult += strs[i].charAt(j);
//                }else{
//                    break loop;
//                }
//            }
//        }
        if(strResult.length() != 0){
            System.out.println("公共前缀为：" + strResult);
        }else {
            System.out.println("没有公共前缀");
        }
        return strResult;*/
    }
}
/**
 * java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
 at line 9, Solution.longestCommonPrefix
 at line 57, __DriverSolution__.__helper__
 at line 85, __Driver__.main
 */
